import plugin from '../../../lib/plugins/plugin.js'
import { Config } from '../components/index.js'
import { common } from '../model/index.js'
import moment from 'moment'
export class Xyqg extends plugin {
  constructor () {
    super({
      name: '小月群管',
      dsc: '小月群管',
      event: 'message.group',
      priority: 10,
      rule: [
        { 
          reg: '^#?(小月)?禁言',
          fnc: 'mute'
        },
        { 
          reg: '^#?(小月)?解禁$',
          fnc: 'unmute'
        },
        { 
          reg: '^#?(小月)?全体(禁言|解禁)$',
          fnc: 'muteAll'
        },
        { 
          reg: '^#踢$',
          fnc: 'kick'
        },
        {
          reg: '^(同意|拒绝|叉出去)$',
          fnc: 'respond'
        },
        {
          reg: '^#?(小月)?(查看|清理)(\\d+)(天|周|月)(没|未)发言的人$',
          fnc: 'selsay'
        },
        {
          reg: '^#?(小月)?(设置头衔|头衔)',
          fnc: 'setGroupTitle'
        }
      ]
    })
  }
  //禁言
  async mute(e) {
   let  config = Config.xyss
   if (!config.qg) return false
   //判断权限
   if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
   //判断是否有管理
   if (!e.group.is_admin && !e.group.is_owner) return e.reply('不给我管理员怎么干活?', true)
   try {
   let exist = await Bot.getGroupMemberInfo(e.group_id, e.at)
   } catch (err) {return e.reply('本群没有此人')}
   let muteTime = e.msg.match(/\d+/)
   let time
   if (/小时/.test(e.msg)) {
     time = 60 * 60
   } else if (/天/.test(e.msg)) {
     time = 24 * 60 * 60
   } else {
     time = 60
   }
    
   muteTime = muteTime ? Number(muteTime[0]) * time  : 5 * 60
   await e.group.muteMember(e.at,muteTime)
   e.reply('已把这个坏家伙拖入小黑屋')
  }
  //解禁
  async unmute(e) {
    let  config = Config.xyss
    if (!config.qg) return false
     //判断权限
   if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
   //判断是否有管理
   if (!e.group.is_admin && !e.group.is_owner) return e.reply('不给我管理员怎么干活?', true)
   if (!e.group.pickMember(e.at).mute_left) return e.reply(`${e.at}没有被关进小黑屋~`)
   await e.group.muteMember(e.at,0)
   e.reply('已成功把他从小黑屋放出来了')
  }
  //全体禁言
  async muteAll(e) {
    let  config = Config.xyss
    if (!config.qg) return false
    //判断权限
    if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
    //判断是否有管理
    if (!e.group.is_admin && !e.group.is_owner) return e.reply('不给我管理员怎么干活?', true)

    let type = /全体禁言/.test(e.msg)
    await e.group.muteAll(type)
  }
  //踢群员
  async kick(e) {
    let  config = Config.xyss
    if (!config.qg) return false
    //判断权限
    if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
    //判断是否有管理
    if (!e.group.is_admin && !e.group.is_owner) return e.reply('不给我管理员怎么干活?', true)
    if (!e.at) return e.reply('无法踢出机器人')
    let qg = await Config.xyqg
    if (qg.proList.includes(e.at)) return e.reply(`${e.at}在保护名单上，无法踢出`)
    let res = await e.group.kickMember(e.at)
    if (!res) return e.reply('无法踢出')
    e.reply('已成功把坏家伙踢出群了')
    if (!qg.blackList.includes(e.at)) {
    qg.blackList.push(e.at)
    Config.modify('xyqg','blackList',qg.blackList)
    }
  }

  async respond(e) {
    if (!e.source || e.source.user_id != Bot.uin) return
    //判断权限
    if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
    let source = (await e.group.getChatHistory(e.source.seq, 1)).pop()
    if (!source) return e.reply('消息太过久远了，下次早点来吧~')
    let approve = /同意/.test(e.msg) ? true : false
    let seq = source.message[0].text.match(/请求码：.*/g)[0].replace(/请求码：/g, '')
    let user = source.message[0].text.match(/QQ：.*/g)[0].replace(/QQ：/g, '')
    await Bot.pickUser(user).setGroupReq(e.group_id, seq,approve)
    e.reply(`已${approve ? '同意' : '拒绝'}${user}的加群请求`)
  }

  async selsay(e) {
    let  config = Config.xyss
    if (!config.qg) return false
    if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
    let Time_unit = {
      天: 86400,
      周: 604800,
      月: 2592000,
    }
    let reg = new RegExp('(查看|清理)(\\d+)(天|周|月)(没|未)发言的人$')
    reg = reg.exec(e.msg)
    let unit = reg[3]
    let times = reg[2] *1
    let nowtime = parseInt(Date.now() / 1000)
    let timeUnit = Time_unit[unit]
    let time = nowtime - times * timeUnit
    let list = await Bot.getGroupMemberList(e.group_id)
    list = Array.from(list.values())
    list = list.filter(item => item.last_sent_time < time && item.role == 'member' && item.user_id != Bot.uin) 
    if (!list.length) return e.reply(`本群暂无${times}${unit}没发言的人`)
    list.sort((a, b) => a.last_sent_time - b.last_sent_time) 
    if (e.msg.includes('清理')) {
      let qg = Config.xyqg
      let err = []
      if (!e.group.is_admin && !e.group.is_owner) return e.reply('不给我管理员怎么干活?', true)
      for (let member of list) {
        if (qg.proList.includes(member.user_id)) continue;
        let res = await e.group.kickMember(member.user_id)
        if (!res) err.push(member.user_id)
        await common.sleep(500)
      }
      if (err.length) {
        let arr = [`总清理${list.length}个人，成功清理${list.length - err.length}个，清理失败${err.length}个，以下是清理失败的名单`]
        for (let i = 0; i < err.length; i++) {
          arr.push(`${i+1}.${err[i]}`)
        }
        common.getforwardMsg(e, arr, '清理失败名单', 0, true, true)
        return true
      }
      e.reply('全部清理成功')
      return true
    }
    let msg = list.map(item =>
      [
        segment.image(`https://q1.qlogo.cn/g?b=qq&s=100&nk=${item.user_id}`),
        `\nQQ：${item.user_id}\n`,
        `昵称：${item.card || item.nickname}\n`,
        `最后发言时间：${moment(item.last_sent_time * 1000).format('YYYY-MM-DD HH:mm:ss')}`
      ]
    )
    if (msg.length > 100) msg.length = 100
    common.getforwardMsg(e, msg, `${times}${unit}没发言的人` , 0, true, true)
  }
  async setGroupTitle(e) {
    if (!e.member.is_admin && !e.member.is_owner && !e.isMaster) return e.reply('管理员以上权限才可使用')
    if (!e.group.is_owner) return e.reply('我不是群主，怎么办得到？', true)
    let title = e.msg.replace(/#|设置头衔|头衔|小月/g, '').trim()
    if (!title) return e.reply('设置什么头衔捏？')
    if (!e.at) return e.reply('请艾特要头衔的人')
    let res = await e.group.setTitle(e.at, title)
    if (res) {
      e.reply(`已经把这个大聪明的头衔设置为「${title}」辣`)
    } else {
      e.reply('未知错误，无法给上头衔')
    }
  }
}
